// 设置相机位置、方向和变换。
// 1、camera.setView(options)

export const setCameraView = (
    viewer,
    location,
    orientation = {
        // 方位角
        heading: Cesium.Math.toRadians(0),
        // 俯仰角
        pitch: Cesium.Math.toRadians(-90),
        // 滚动角
        roll: 0.0
    },
    duration = 3,
    convert = true
) => {
    viewer.camera.setView({
        // 相机在WGS84世界坐标系中的最终位置，或是自顶向下视图中可见的矩形区域。
        destination: Cesium.Cartesian3.fromDegrees(...location),
        orientation,
        duration,
        // 是否将相机最终位置从世界坐标转换为场景坐标，默认值True。
        convert
    });
};

// camera.flyTo(target, options): 使相机飞行到指定的目标位置，并设置相应的动画效果和参数。
// 2、
/**
 * 飞行动画
 * @param {*} viewer 场景
 * @param {Array} location 经、纬度、高度
 * @param {*} orientation 旋转角度
 * @param {*} duration 飞行时间
 */
export const flyTo = (
    viewer,
    location,
    orientation = {
        // 方位角
        heading: Cesium.Math.toRadians(0),
        // 俯仰角
        pitch: Cesium.Math.toRadians(-90),
        // 滚动角
        roll: 0.0
    },
    duration = 3
) => {
    viewer.camera.flyTo({
        // 相机在WGS84世界坐标系中的最终位置，或是自顶向下视图中可见的矩形区域。
        destination: new Cesium.Cartesian3.fromDegrees(...location),
        orientation,
        duration,
        // 飞行结束后的回调
        complete: function () {}
    });
};

/**
 * camera.moveEnd.addEventListener
 * 监听相机位置
 */
export const cameraListener = (viewer, position) => {
    viewer.camera.moveEnd.addEventListener(() => {
        // 世界坐标系
        const result = Cesium.Cartographic.fromCartesian(position);
        // 纬度
        const latitude = Cesium.Math.toDegrees(result.latitude);
        // 经度
        const longitude = Cesium.Math.toDegrees(result.longitude);
        console.log(viewer.camera.position);

        return {
            lng: longitude,
            lat: latitude
        };
    });
};
